Deadlock
Deadlock이란 process가 서로의 자원(CPU, 메모리, IO 기기)을 기다리며 무한정 대기 상태에 빠지는 상황을 말한다.
🧑🏻💻 교착 상태 원인 네 가지
아래 네 가지 조건을 모두 만족하면 교착 상태가 나타난다.
✅ 상호 배제
- mutual exclusion
- 자원을 동시에 공유할 수 없는 상태를 뜻한다.
- 다른 process가 자원을 사용하려면 자원이 방출될 때까지 기다려야 한다.
✅ 점유와 대기
- hold and wait
- 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태를 뜻한다.
✅ 비선점
- no preemption
- 우선권이 없어서 다른 process가 사용 중인 자원을 강제로 빼앗지 못하는 상태를 뜻한다.
✅ 원형 대기
- circular wait
- process들이 원의 형태로 서로의 자원을 대기하는 상태를 뜻한다.
✅ 자원 할당 그래프
위 조건들은 process와 자원의 상태를 나타낸 그래프로 표현하면 다음과 같다.
교착 상태 = 상호 배제 + 점유와 대기 + 비선점 + 원형 대기 = 자원 할당 그래프의 형태가 원
- 자원 = 사각형
- process = 원
- 사용할 수 있는 자원의 개수 = 사각형 안 점의 개수
- 자원을 할당받음 = 자원에서 process로 화살표 표시
- 자원을 기다림 = process에서 자원으로 화살표 표시
🧑🏻💻 교착 상태 해결법 네 가지
✅ 예방 방식
교착 상태 원인 네 가지 중 하나가 성립하지 않게 하는 방법으로 교착 상태를 해결한다.
✏️ 상호 배제 해결하기
자원을 동시에 공유할 수 없는 상태 ↔ 자원을 동시에 공유할 수 있게 해준다.
하지만 프린터와 같이 동시에 사용할 수 없는 경우도 발생한다.
✏️ 점유와 대기 해결하기
자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태 ↔ 특정 process에만 자원을 점유시켜 대기를 없앤다.
하지만 자원을 효율적으로 사용하기 힘들다.
✏️ 비선점 해결하기
어떤 process도 다른 process의 자원을 강제로 빼앗지 못하는 상태 ↔ 선점형으로 process 관리한다.
하지만 모든 자원이 선점할 수 있는 것은 아니다.
✏️ 원형 대기 해결하기
process들이 원의 형태로 서로의 자원을 대기하는 상태 ↔ 모든 자원에 우선순위를 부여하여 우선순위가 높은 자원은 대기할 수 없게 한다.
우선순위를 붙이는 작업이 따로 필요하고 우선순위가 낮은 작업이 계속 실행되지 않을 수 있다.
✅ 회피 방식
process에 자원을 할당할 때 교착 상태가 발생하는 할당량을 파악하여 그 수준 이하로 자원을 나누어주는 방법이다.
✅ 검출 후 회복 방식
시스템 검사를 통해 deadlock 발생을 탐지하고, 이를 회복시키는 방법이다.
✏️ 선점을 통한 회복
- 교착 상태가 해결될 때까지 한 process씩 자원을 몰아 주는 방법이다.
✏️ process 강제 종료
- 모두 강제 종료 시 → 작업 내역을 잃을 수 있다.
- 하나씩 강제 종료 시 → 잦은 확인으로 오버헤드 가능성 높다.
✅ 무시
deadlock 발생 확률이 낮은 시스템에서 주로 사용하며, 아무런 조치도 취하지 않고 deadlock을 무시하는 방법이다.
참고 자료
- 혼자 공부하는 컴퓨터구조 + 운영체제